`timescale 1ns / 1ps
// ********************************************************************
//	FileName	: cbb_LedStatus.v
//	Author		：hpy 
//	Email		：yuan_hp@qq.com 
//	Date		：2021年01月16日 
//	Description	：单个led的状态指示灯
//   status ==>
//         0 : 关闭
//         1 : 亮
//         2 ： 0.25hz
//         3 ： 0.5hz
//         4 ： 1hz
//         5 ： 2hz
//         6 ： 10hz
// -------------------------------------------------------------------- 

/*----------------------------------------
cbb_LedStatus #(
    .CLK_FREQ (12000000)   //系统时钟频率
) u1 (
    .clk(   clk),
    .rst_n( rst_n),
    .status(),  //输入led状态
    .led  ()  
);
-----------------------------------------*/
module cbb_LedStatus #(
    parameter CLK_FREQ = 12000000   //系统时钟频率
)(
    input clk,
    input rst_n,
    input [2:0] status,  //输入led状态
    output reg led    
);

`define ON 1'B0
`define OFF 1'B1 
parameter N_4S = 4*CLK_FREQ;
parameter N_2S = 2*CLK_FREQ;
parameter N_1S = CLK_FREQ;
parameter N_500MS = CLK_FREQ/2;
parameter N_100MS = CLK_FREQ/10;


reg  [31 : 0 ] cnt ;
always @(posedge clk or negedge rst_n ) begin 
    if(!rst_n) begin 
        led <= `OFF;
        cnt <= 0;
    end 
    else begin
        case(status)
            3'd0: led <= `OFF;
            3'd1: led <= `ON;
            3'D2: begin
                cnt <= cnt >= N_4S - 1'b1 ? 32'd0 : cnt + 1'b1;
                led <= (cnt <= (N_4S>>1) - 1'B1) ? `ON : `OFF ;
            end
            3'D3: begin
                cnt <= cnt >= N_2S - 1'b1 ? 32'd0 : cnt + 1'b1;
                led <= (cnt <= (N_2S>>1) - 1'B1) ? `ON : `OFF ;
            end
            3'D4: begin
                cnt <= cnt >= N_1S - 1'b1 ? 32'd0 : cnt + 1'b1;
                led <= (cnt <= (N_1S>>1) - 1'B1) ? `ON : `OFF ;
            end
            3'D5: begin
                cnt <= cnt >= N_500MS - 1'b1 ? 32'd0 : cnt + 1'b1;
                led <= (cnt <= (N_500MS>>1) - 1'B1) ? `ON : `OFF ;               
            end
            3'D6: begin
                cnt <= cnt >= N_100MS - 1'b1 ? 32'd0 : cnt + 1'b1;
                led <= (cnt <= (N_100MS>>1) - 1'B1) ? `ON : `OFF ;               
            end
            default : ;
        endcase 
    end
end 

endmodule
